﻿////////////////////////////////////////
// 작성일 : 2011년 11월 1일
// 작성자 : psh
////////////////////////////////////////

using System;
using System.Data;

namespace PGun.Core
{
    /// <summary>
    /// 데이타 관리자
    /// </summary>
    public class DataManager
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// 데이타베이스 관리자
        /// </summary>
        private DBManager _pDBManager;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Property

        #region 데이타베이스 관리자 - DBManager

        /// <summary>
        /// 데이타베이스 관리자
        /// </summary>
        public DBManager DBManager
        {
            get
            {
                return _pDBManager;
            }
        }

        #endregion

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - DataManager(pDBManager)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="pDBManager">데이타베이스 관리자</param>
        public DataManager(DBManager pDBManager)
        {
            _pDBManager = pDBManager;
        }

        #endregion

        #region 생성자 - DataManager()

        /// <summary>
        /// 생성자
        /// </summary>
        public DataManager()
            : this(new DBManager())
        {
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Destructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 소멸자 - ~DataManager()

        /// <summary>
        /// 소멸자
        /// </summary>
        ~DataManager()
        {
            try
            {
                Close();
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 데이타 구하기 - GetData(pCommandType, strCommandText, pDataParameters)

        /// <summary>
        /// 데이타 구하기
        /// </summary>
        /// <param name="pCommandType">명령 종류</param>
        /// <param name="strCommandText">명령문</param>
        /// <param name="pDataParameters">데이타 매개 변수 목록</param>
        /// <returns>데이타 셋</returns>
        public DataSet GetData(CommandType pCommandType, string strCommandText, IDataParameter[] pDataParameters)
        {
            try
            {
                return _pDBManager.GetDataSet(pCommandType, strCommandText, pDataParameters);
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion

        #region 데이타 추가하기 - InsertData(pCommandType, strCommandText, pDataParameters)

        /// <summary>
        /// 데이타 추가하기
        /// </summary>
        /// <param name="pCommandType">명령 종류</param>
        /// <param name="strCommandText">명령문</param>
        /// <param name="pDataParameters">데이타 매개 변수 목록</param>
        /// <returns>데이타 셋</returns>
        public DataSet InsertData(CommandType pCommandType, string strCommandText, IDataParameter[] pDataParameters)
        {
            try
            {
                return _pDBManager.GetDataSet(pCommandType, strCommandText, pDataParameters);
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion

        #region 데이타 수정하기 - UpdateData(pCommandType, strCommandText, pDataParameters)

        /// <summary>
        /// 데이타 수정하기
        /// </summary>
        /// <param name="pCommandType">명령 종류</param>
        /// <param name="strCommandText">명령문</param>
        /// <param name="pDataParameters">데이타 매개 변수 목록</param>
        /// <returns>데이타 셋</returns>
        public DataSet UpdateData(CommandType pCommandType, string strCommandText, IDataParameter[] pDataParameters)
        {
            try
            {
                return _pDBManager.GetDataSet(pCommandType, strCommandText, pDataParameters);
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion

        #region 데이타 삭제하기 - DeleteData(pCommandType, strCommandText, pDataParameters)

        /// <summary>
        /// 데이타 삭제하기
        /// </summary>
        /// <param name="pCommandType">명령 종류</param>
        /// <param name="strCommandText">명령문</param>
        /// <param name="pDataParameters">데이타 매개 변수 목록</param>
        /// <returns>삭제 행 수</returns>
        public int DeleteData(CommandType pCommandType, string strCommandText, IDataParameter[] pDataParameters)
        {
            try
            {
                return _pDBManager.Execute(pCommandType, strCommandText, pDataParameters);
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion

        #region 닫기 - Close()

        /// <summary>
        /// 닫기
        /// </summary>
        public void Close()
        {
            try
            {
                if (_pDBManager != null)
                {
                    _pDBManager.Close();

                    _pDBManager = null;
                }
            }
            catch (Exception pException)
            {
                throw pException;
            }
        }

        #endregion
    }
}